start := time.Now()
timeoutFuture := start.Add(time.Minute * 5)
var newClient *client.Client
for time.Now().Unix() < timeoutFuture.Unix() {
  log.Printf("waiting for %s to be connectable....", ip)
  time.Sleep(5 * time.Second)
  var errClient error
  newClient, errClient = client.NewClient(fmt.Sprintf("tcp://%s:2375",ip), client.DefaultVersion, nil, nil)
  if errClient != nil {
     log.Printf("current loop's error - %v", errClient)
  } else if newClient != nil {
     ping, errClient := newClient.Ping(context.Background())
     if errClient == nil {
        log.Printf("Ping result - docker %v", ping.APIVersion)
        break;
     } else {
        log.Printf("Couldn't ping remote docker machine - %v", errClient)
     }
  }
}